package main

import (
	"log"
	"runtime"
	"time"
)

type Road int

func findRoad(r *Road) {

	log.Println("road:", *r)
}

func entry() {
	var rd Road = Road(999)
	r := &rd

	runtime.SetFinalizer(r, findRoad)
	r = nil
}

func main() {

	entry()

	for i := 0; i < 10; i++ {
		time.Sleep(time.Second)
		runtime.GC()
	}

}

// runtime.GC() 函数:
// GC 是自动进行的，如果要手动进行 GC，可以使用 runtime.GC() 函数，显式的执行 GC。显式的进行 GC 只在某些特殊的情况下才有用，
// 比如当内存资源不足时调用 runtime.GC() ，这样会立即释放一大片内存，但是会造成程序短时间的性能下降
// finalizer（终止器）:
// 如果某个对象定义了 finalizer，当它被 GC 时候，这个 finalizer 就会被调用，以完成一些特定的任务，例如发信号或者写日志等。
